package gspushmq.util;

import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.LinkedHashMap;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;

import gspushmq.v1.subscribe.core.HandlerSubscribe;
import gspushmq.v1.subscribe.handler.core.GGHandler;
import gspushmq.v1.subscribe.send.core.GGSend;

public class ToolsUtil {

	
	/**
	 * 将参数反向解析成map形式
	 * @param paramStr
	 * @return
	 * @author yutao
	 * @date 2018年1月12日下午4:01:23
	 */
	public static Map<String, String> getParamMap(String paramStr){
		
		LinkedHashMap<String, String> params = new LinkedHashMap<>();
		if(StringUtils.isNotBlank(paramStr)){
			String[] split = paramStr.split("&");
			for(String s : split){
				String[] ss = s.split("=");
				try {
					if(ss.length == 2){
						params.put(ss[0], URLDecoder.decode(ss[1], "UTF-8"));
					}else{
						params.put(ss[0], "");
					}
				} catch (UnsupportedEncodingException e) {
					e.printStackTrace();
				}
			}
		}
		return params;
	}
	
	/**
	 * 得到用&好拼接后的URL
	 * 
	 * @param params
	 * @param incomingParams
	 * @return
	 * @author yutao
	 * @date 2018年1月9日下午5:31:28
	 */
	public static String getUrlStr(Map<String, String> params) {
		String incomingParams = "";
		if (params != null && !params.isEmpty()) {
			try {
				for (String s : params.keySet()) {
					incomingParams = incomingParams + s + "=" + URLEncoder.encode((String) params.get(s), "UTF-8") + "&";
				}
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			}
			incomingParams = incomingParams.substring(0, incomingParams.length() - 1);
		}
//		String paramsStr = JSON.toJSONString(params);
//		incomingParams = paramsStr.replaceAll("[{}\"]", "").replaceAll(":", "=").replaceAll(",", "&");
		return incomingParams;
	}
	
	
	/**
	 * 
	 * 方法描述 取数据小数点后几位 （eg:0.00002 -- 得到的是0.00）
	 *
	 * @param v1 数据
	 * @param scale 精度
	 * @return
	 * 
	 * @author yaomy
	 * @date 2016年11月11日 下午1:30:19
	 */
	public static BigDecimal scal(double v1, int scale){
		 BigDecimal b1 = new BigDecimal(Double.toString(v1));  
		 return b1.setScale(scale, BigDecimal.ROUND_HALF_UP);
	}
	
	/**
	 * 
	 * @param o
	 * @return
	 * @author yutao
	 * @date 2019年1月15日上午10:34:49
	 */
	public static Integer commonTo(Object o) {
		Integer op = 0;
		if (o instanceof GGHandler) {
			op =((GGHandler)o).getPriority();
		}else if (o instanceof GGSend) {
			op =((GGSend)o).getPriority();
		}else if (o instanceof HandlerSubscribe) {
			op = ((HandlerSubscribe)o).getPriority();
		}
		return op;
	}
}
